using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._SpatialStatisticsTools._Utilities
{
    /// <summary>
    /// <para>Export Feature Attribute To ASCII</para>
    /// <para>Exports feature class coordinates and attribute values to a space-, comma-, tab-, or semicolon-delimited ASCII text file.</para>
    /// <para>将要素类坐标和属性值导出为空格、逗号、制表符或分号分隔的 ASCII 文本文件。</para>
    /// </summary>    
    [DisplayName("Export Feature Attribute To ASCII")]
    public class ExportXYv : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ExportXYv()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_Input_Feature_Class">
        /// <para>Input Feature Class</para>
        /// <para>The feature class from which the feature coordinates and attribute values will be exported.</para>
        /// <para>将从中导出要素坐标和属性值的要素类。</para>
        /// </param>
        /// <param name="_Value_Field">
        /// <para>Value Field</para>
        /// <para>The field or fields in the input feature class containing the values to export to an ASCII text file.</para>
        /// <para>输入要素类中包含要导出到 ASCII 文本文件的值的一个或多个字段。</para>
        /// </param>
        /// <param name="_Delimiter">
        /// <para>Delimiter</para>
        /// <para><xdoc>
        ///   <para>Specifies how feature coordinates and attribute values will be separated in the output ASCII file.</para>
        ///   <bulletList>
        ///     <bullet_item>Space—Feature coordinates and attribute values will be separated by a space in the output. This is the default.</bullet_item><para/>
        ///     <bullet_item>Comma—Feature coordinates and attribute values will be separated by a comma in the output.</bullet_item><para/>
        ///     <bullet_item>Semicolon—Feature coordinates and attribute values will be separated by a semicolon in the output.</bullet_item><para/>
        ///     <bullet_item>Tab—Feature coordinates and attribute values will be separated by a tab in the output.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定如何在输出 ASCII 文件中分隔要素坐标和属性值。</para>
        ///   <bulletList>
        ///     <bullet_item>空间 - 要素坐标和属性值将在输出中用空格分隔。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>逗号—要素坐标和属性值将在输出中用逗号分隔。</bullet_item><para/>
        ///     <bullet_item>分号—要素坐标和属性值将在输出中用分号分隔。</bullet_item><para/>
        ///     <bullet_item>选项卡 - 要素坐标和属性值将由输出中的选项卡分隔。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        /// <param name="_Output_ASCII_File">
        /// <para>Output ASCII File</para>
        /// <para>The ASCII text file that will contain the feature coordinates and attribute values.</para>
        /// <para>将包含要素坐标和属性值的 ASCII 文本文件。</para>
        /// </param>
        /// <param name="_Add_Field_Names_to_Output">
        /// <para>Add Field Names to Output</para>
        /// <para><xdoc>
        ///   <para>Specifies whether field names will be included as the first line in the output text file.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Field names will be written to the output text file.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Field names will not be written to the output text file. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定字段名称是否作为输出文本文件的第一行包含在内。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 字段名称将写入输出文本文件。</bullet_item><para/>
        ///     <bullet_item>未选中 - 字段名称不会写入输出文本文件。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        public ExportXYv(object _Input_Feature_Class, List<object> _Value_Field, _Delimiter_value _Delimiter, object _Output_ASCII_File, _Add_Field_Names_to_Output_value _Add_Field_Names_to_Output)
        {
            this._Input_Feature_Class = _Input_Feature_Class;
            this._Value_Field = _Value_Field;
            this._Delimiter = _Delimiter;
            this._Output_ASCII_File = _Output_ASCII_File;
            this._Add_Field_Names_to_Output = _Add_Field_Names_to_Output;
        }
        public override string ToolboxName => "Spatial Statistics Tools";

        public override string ToolName => "Export Feature Attribute To ASCII";

        public override string CallName => "stats.ExportXYv";

        public override List<string> AcceptEnvironments => ["geographicTransformations", "outputCoordinateSystem", "scratchWorkspace", "workspace"];

        public override object[] ParameterInfo => [_Input_Feature_Class, _Value_Field, _Delimiter.GetGPValue(), _Output_ASCII_File, _Add_Field_Names_to_Output.GetGPValue()];

        /// <summary>
        /// <para>Input Feature Class</para>
        /// <para>The feature class from which the feature coordinates and attribute values will be exported.</para>
        /// <para>将从中导出要素坐标和属性值的要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _Input_Feature_Class { get; set; }


        /// <summary>
        /// <para>Value Field</para>
        /// <para>The field or fields in the input feature class containing the values to export to an ASCII text file.</para>
        /// <para>输入要素类中包含要导出到 ASCII 文本文件的值的一个或多个字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Value Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public List<object> _Value_Field { get; set; }


        /// <summary>
        /// <para>Delimiter</para>
        /// <para><xdoc>
        ///   <para>Specifies how feature coordinates and attribute values will be separated in the output ASCII file.</para>
        ///   <bulletList>
        ///     <bullet_item>Space—Feature coordinates and attribute values will be separated by a space in the output. This is the default.</bullet_item><para/>
        ///     <bullet_item>Comma—Feature coordinates and attribute values will be separated by a comma in the output.</bullet_item><para/>
        ///     <bullet_item>Semicolon—Feature coordinates and attribute values will be separated by a semicolon in the output.</bullet_item><para/>
        ///     <bullet_item>Tab—Feature coordinates and attribute values will be separated by a tab in the output.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定如何在输出 ASCII 文件中分隔要素坐标和属性值。</para>
        ///   <bulletList>
        ///     <bullet_item>空间 - 要素坐标和属性值将在输出中用空格分隔。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>逗号—要素坐标和属性值将在输出中用逗号分隔。</bullet_item><para/>
        ///     <bullet_item>分号—要素坐标和属性值将在输出中用分号分隔。</bullet_item><para/>
        ///     <bullet_item>选项卡 - 要素坐标和属性值将由输出中的选项卡分隔。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Delimiter")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _Delimiter_value _Delimiter { get; set; }

        public enum _Delimiter_value
        {
            /// <summary>
            /// <para>Space</para>
            /// <para>Space—Feature coordinates and attribute values will be separated by a space in the output. This is the default.</para>
            /// <para>空间 - 要素坐标和属性值将在输出中用空格分隔。这是默认设置。</para>
            /// </summary>
            [Description("Space")]
            [GPEnumValue("SPACE")]
            _SPACE,

            /// <summary>
            /// <para>Comma</para>
            /// <para>Comma—Feature coordinates and attribute values will be separated by a comma in the output.</para>
            /// <para>逗号—要素坐标和属性值将在输出中用逗号分隔。</para>
            /// </summary>
            [Description("Comma")]
            [GPEnumValue("COMMA")]
            _COMMA,

            /// <summary>
            /// <para>Semicolon</para>
            /// <para>Semicolon—Feature coordinates and attribute values will be separated by a semicolon in the output.</para>
            /// <para>分号—要素坐标和属性值将在输出中用分号分隔。</para>
            /// </summary>
            [Description("Semicolon")]
            [GPEnumValue("SEMI-COLON")]
            value2,

            /// <summary>
            /// <para>Tab</para>
            /// <para>Tab—Feature coordinates and attribute values will be separated by a tab in the output.</para>
            /// <para>选项卡 - 要素坐标和属性值将由输出中的选项卡分隔。</para>
            /// </summary>
            [Description("Tab")]
            [GPEnumValue("TAB")]
            _TAB,

        }

        /// <summary>
        /// <para>Output ASCII File</para>
        /// <para>The ASCII text file that will contain the feature coordinates and attribute values.</para>
        /// <para>将包含要素坐标和属性值的 ASCII 文本文件。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output ASCII File")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _Output_ASCII_File { get; set; }


        /// <summary>
        /// <para>Add Field Names to Output</para>
        /// <para><xdoc>
        ///   <para>Specifies whether field names will be included as the first line in the output text file.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Field names will be written to the output text file.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Field names will not be written to the output text file. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定字段名称是否作为输出文本文件的第一行包含在内。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 字段名称将写入输出文本文件。</bullet_item><para/>
        ///     <bullet_item>未选中 - 字段名称不会写入输出文本文件。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Add Field Names to Output")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _Add_Field_Names_to_Output_value _Add_Field_Names_to_Output { get; set; }

        public enum _Add_Field_Names_to_Output_value
        {
            /// <summary>
            /// <para>ADD_FIELD_NAMES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("ADD_FIELD_NAMES")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_FIELD_NAMES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_FIELD_NAMES")]
            [GPEnumValue("false")]
            _false,

        }

        public ExportXYv SetEnv(object geographicTransformations = null, object outputCoordinateSystem = null, object scratchWorkspace = null, object workspace = null)
        {
            base.SetEnv(geographicTransformations: geographicTransformations, outputCoordinateSystem: outputCoordinateSystem, scratchWorkspace: scratchWorkspace, workspace: workspace);
            return this;
        }

    }

}